home *** CD-ROM | disk | FTP | other *** search
- // author: Chuck Baker
- // contact: febe@customsoftwareconsult.com
- // Version 5.0
-
- var febeBackupInProgress = new Boolean(false); // Is a backup currently running?
- var febeScheduledBackupID = new Number; // PID of scheduled backup
- var febeScheduledWarningID = new Number; // PID of scheduled backup warning
- var febeNextBackup = new String(); // Text description of next scheduled backup
- var febeSchedule = new String() // Scheduled backup frequency
- var febeIsScheduled = new Boolean(false) // Is a backup scheduled?
- var febeSetTimeoutID = []; // Array holing settimeout ids
- var febeDailyHour = new Number; // Hour(00 - 23) of daily backup
- var febeDailyMinute = new Number; // Minute (0 - 55) of daily backup, 5 min increments
- var febeWeeklyDay = new Number; // Day of week (sun=0 ... sat=6) of daily backup
- var febeWeeklyHour = new Number; // Hour(00 - 23) of weekly backup
- var febeWeeklyMinute = new Number; // Minute (0 - 55) of weekly backup, 5 min increments
- var febeMonthlyDay = new Number; // Day of month (1 - 28) of monthly backup
- var febeMonthlyHour = new Number; // Hour(00 - 23) of monthly backup
- var febeMonthlyMinute = new Number; // Minute (0 - 55) of monthly backup, 5 min increments
- var febeNB = new Date(); // Next backup date
-
- function febeScheduleBackup(){
- // Determine when (or if) a scheduled backup will take place and put it in the queue
- if(!febeScheduleInit()){return;}
-
- var now = new Date().getTime(); // Current time in milliseconds
- var wait = new Number; // Number of milliseconds until next backup
- var oneDay = 24 * 60 * 60 * 1000; // One day in milliseconds
- var tmp = new Number;
- febeNB = new Date();
- febeNB.setSeconds(0);
- var d = new Date();
- switch(febeSchedule){
- case "daily":
- febeNB.setHours(febeDailyHour);
- febeNB.setMinutes(febeDailyMinute);
- wait = febeNB.getTime() - now;
- if(wait <= 0){ // Scheduled time already passed
- tmp = febeNB.getTime();
- tmp += oneDay; // Add a day
- febeNB.setTime(tmp);
- wait = febeNB.getTime() - now;
- }//if
- break;
- case "weekly":
- var today = d.getDay();
- tmp = today * oneDay;
- d.setTime(now-tmp);
- d.setHours(0,0,0); // Last Sunday, Midnight
- var sunday = d.getTime();
- tmp = febeWeeklyDay * oneDay;
- febeNB.setTime(sunday + tmp);
- febeNB.setHours(febeWeeklyHour);
- febeNB.setMinutes(febeWeeklyMinute);
- wait = febeNB.getTime() - now;
- if(wait <= 0){ // Scheduled time already passed
- tmp = febeNB.getTime();
- tmp += (oneDay * 7);// Add a week
- febeNB.setTime(tmp);
- wait = febeNB.getTime() - now;
- }//if
- break;
- case "monthly":
- febeNB.setDate(febeMonthlyDay);
- febeNB.setHours(febeMonthlyHour);
- febeNB.setMinutes(febeMonthlyMinute);
- wait = febeNB.getTime() - now;
- if(wait <= 0){ // Scheduled time already passed
- var numDaysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
- var thisMonth = d.getMonth();
- var nextMonth = thisMonth + 1;
- if(nextMonth == 12){nextMonth = 0};
- var dayOfMonth = d.getDate();
- var daysLeftThisMonth = numDaysInMonth[thisMonth] - dayOfMonth;
- tmp = (daysLeftThisMonth +1) * oneDay;
- febeNB.setTime(now + tmp);
- febeNB.setHours(0,0,0); // First day of next month at Midnight
- febeNB.setDate(febeMonthlyDay);
- febeNB.setHours(febeMonthlyHour);
- febeNB.setMinutes(febeMonthlyMinute);
- wait = febeNB.getTime() - now;
- }//if
- break;
- }//switch
-
- // Schedule the backup
- for(var i in febeSetTimeoutID){
- var to = new febeSetTimeoutObj;
- to.PID = febeSetTimeoutID[i].PID;
- clearTimeout(to.PID);
- }//for
- febeSetTimeoutID = [];
-
- // Warn 1 minute before backup starts
- var to = new febeSetTimeoutObj;
- to.PID = setTimeout("febeWarn()",wait-60000);
- to.Process = "febeWarn()";
- febeSetTimeoutID.push(to);
- to = new febeSetTimeoutObj;
- to.PID = setTimeout("febeInit()",wait);
- to.Process = "febeInit()";
- febeSetTimeoutID.push(to);
- //alert("In febeScheduleBackup: "+febeSetTimeoutID)
- febeSetStatus();
- }//febeScheduleBackup()
-
- function febeScheduleInit(){
- // Get daily time info
- var prefName = "extensions.febe.schedule.daily.hour";
- if(febePrefs.prefHasUserValue(prefName)){
- febeDailyHour = febePrefs.getIntPref(prefName);
- } else {
- febePrefs.setIntPref(prefName,1);
- febeDailyHour = 1;
- }//if
- var prefName = "extensions.febe.schedule.daily.minute";
- if(febePrefs.prefHasUserValue(prefName)){
- febeDailyMinute = febePrefs.getIntPref(prefName);
- } else {
- febePrefs.setIntPref(prefName,0);
- febeDailyMinute = 0;
- }//if
-
- // Get weekly time info
- var prefName = "extensions.febe.schedule.weekly.day";
- if(febePrefs.prefHasUserValue(prefName)){
- febeWeeklyDay = febePrefs.getIntPref(prefName);
- } else {
- febePrefs.setIntPref(prefName,0);
- febeWeeklyDay = 0;
- }//if
- var prefName = "extensions.febe.schedule.weekly.hour";
- if(febePrefs.prefHasUserValue(prefName)){
- febeWeeklyHour = febePrefs.getIntPref(prefName);
- } else {
- febePrefs.setIntPref(prefName,1);
- febeWeeklyHour = 1;
- }//if
- var prefName = "extensions.febe.schedule.weekly.minute";
- if(febePrefs.prefHasUserValue(prefName)){
- febeWeeklyMinute = febePrefs.getIntPref(prefName);
- } else {
- febePrefs.setIntPref(prefName,0);
- febeWeeklyMinute = 0;
- }//if
-
- // Get monthly time info
- var prefName = "extensions.febe.schedule.monthly.day";
- if(febePrefs.prefHasUserValue(prefName)){
- febeMonthlyDay = febePrefs.getIntPref(prefName);
- } else {
- febePrefs.setIntPref(prefName,1);
- febeMonthlyDay = 1;
- }//if
- var prefName = "extensions.febe.schedule.monthly.hour";
- if(febePrefs.prefHasUserValue(prefName)){
- febeMonthlyHour = febePrefs.getIntPref(prefName);
- } else {
- febePrefs.setIntPref(prefName,1);
- febeMonthlyHour = 1;
- }//if
- var prefName = "extensions.febe.schedule.monthly.minute";
- if(febePrefs.prefHasUserValue(prefName)){
- febeMonthlyMinute = febePrefs.getIntPref(prefName);
- } else {
- febePrefs.setIntPref(prefName,0);
- febeMonthlyMinute = 0;
- }//if
-
- // Get scheduled backup frequency
- var prefName = "extensions.febe.schedule.frequency";
- if(febePrefs.prefHasUserValue(prefName)){
- febeSchedule = febePrefs.getCharPref(prefName);
- } else {
- febePrefs.setCharPref(prefName,"none");
- febeSchedule = "none";
- }//if
-
- // Set scheduled backup string
- var prefName = "extensions.febe.schedule.description";
- if(febePrefs.prefHasUserValue(prefName)){
- febeNextBackup = febeGetUnicharPref(prefName);
- } else {
- febeSetUnicharPref(prefName,febeMsg[113]);
- febeNextBackup = febeMsg[113];
- }//if
-
- febeIsScheduled = true;
- if(febeSchedule == "none"){
- febeIsScheduled = false;
- }//if
- febeSetStatus();
- return febeIsScheduled;
- }//febeScheduleInit()
-
- function febeScheduleChange(){
- febeScheduleInit();
- switch(febeSchedule){
- case "daily":
- febeDisableDaily(false);
- febeDisableWeekly(true);
- febeDisableMonthly(true);
- febeDisableScheduleInfo(false);
- break;
- case "weekly":
- febeDisableDaily(true);
- febeDisableWeekly(false);
- febeDisableMonthly(true);
- febeDisableScheduleInfo(false);
- break;
- case "monthly":
- febeDisableDaily(true);
- febeDisableWeekly(true);
- febeDisableMonthly(false);
- febeDisableScheduleInfo(false);
- break;
- case "none":
- febeDisableDaily(true);
- febeDisableWeekly(true);
- febeDisableMonthly(true);
- febeDisableScheduleInfo(true);
- break;
- }//switch
- }//febeScheduleChange()
-
- function febeDisableDaily(state){
- document.getElementById("dailylabelID").disabled = state;
- document.getElementById("dailyHourID").disabled = state;
- document.getElementById("dailyMinuteID").disabled = state;
- }//febeDisableDaily()
-
- function febeDisableWeekly(state){
- document.getElementById("weeklylabelID").disabled = state;
- document.getElementById("weeklylabelatID").disabled = state;
- document.getElementById("weeklyDayID").disabled = state;
- document.getElementById("weeklyHourID").disabled = state;
- document.getElementById("weeklyMinuteID").disabled = state;
- }//febeDisableWeekly()
-
- function febeDisableMonthly(state){
- document.getElementById("monthlylabelID").disabled = state;
- document.getElementById("monthlylabelatID").disabled = state;
- document.getElementById("monthlyDayID").disabled = state;
- document.getElementById("monthlyHourID").disabled = state;
- document.getElementById("monthlyMinuteID").disabled = state;
- }//febeDisableDaily()
-
- function febeDisableScheduleInfo(state){
- document.getElementById("setschedulebtn").disabled = state;
- document.getElementById("setschedulelbl").disabled = state;
- document.getElementById("nextbackupdate").disabled = state;
- document.getElementById("nextbackupdate").value=febeMsg[113];
- }//febeDisableDaily()
-
- function febeSetScheduleBtn(){
- febeScheduleBackup();
- if(febeIsScheduled == true){
- document.getElementById("nextbackupdate").value= febeLocalizedDate(febeNB);
- }else{
- document.getElementById("nextbackupdate").value = febeMsg[113];
- }//if
- febeSetStatus();
- }//febeSetScheduleBtn()
-
- function febeSetStatus(){
- // Set statusbar icon
- // Pointer to main browser window
- var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
- .getService(Components.interfaces.nsIWindowMediator);
- var win = wm.getMostRecentWindow("navigator:browser");
- var d = win.document.getElementById("febestatusbar");
-
- var prefName = "extensions.febe.schedule.description";
- //febeNextBackup = febeNB;
- febeNextBackup = febeLocalizedDate(febeNB);
- febeSetUnicharPref(prefName,febeNextBackup);
-
- if(febeIsScheduled == true){
- d.setAttribute("status","normal");
- var tmp = febeMsg[114] + febeNextBackup;
- }else{
- d.setAttribute("status","nobackup");
- var tmp = febeMsg[113];
- }//if
- d.tooltipText = tmp;
-
- // Hide statusbar icons?
- var prefName = "extensions.febe.hideIcons"
- if(febePrefs.prefHasUserValue(prefName)){
- febeHideIcons = febePrefs.getBoolPref(prefName);
- }else{
- febeHideIcons = false;
- febePrefs.setBoolPref(prefName,febeHideIcons);
- }//if
- d.setAttribute("hidden",febeHideIcons);
- }//febeSetStatus()
-
- function febeInvert(){
- // Bug? "oncommand" executed before preference change, so invert checked status
- febeHideIcons = !(document.getElementById("hideIcons").value);
- var prefName = "extensions.febe.hideIcons"
- febePrefs.setBoolPref(prefName,febeHideIcons);
- febeSetStatus();
- }//febeInvert()
-
- //alert("febeScheduleBackup.js");